<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>32.4. Advanced usage</title>
<link rel="stylesheet" href="dbstyle.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="Programmer's Reference Guide">
<link rel="up" href="zend.paginator.html" title="Chapter 32. Zend_Paginator">
<link rel="prev" href="zend.paginator.configuration.html" title="32.3. Configuration">
<link rel="next" href="zend.pdf.html" title="Chapter 33. Zend_Pdf">
<link rel="chapter" href="introduction.html" title="Chapter 1. Introduction to Zend Framework">
<link rel="chapter" href="zend.acl.html" title="Chapter 2. Zend_Acl">
<link rel="chapter" href="zend.auth.html" title="Chapter 3. Zend_Auth">
<link rel="chapter" href="zend.cache.html" title="Chapter 4. Zend_Cache">
<link rel="chapter" href="zend.config.html" title="Chapter 5. Zend_Config">
<link rel="chapter" href="zend.console.getopt.html" title="Chapter 6. Zend_Console_Getopt">
<link rel="chapter" href="zend.controller.html" title="Chapter 7. Zend_Controller">
<link rel="chapter" href="zend.currency.html" title="Chapter 8. Zend_Currency">
<link rel="chapter" href="zend.date.html" title="Chapter 9. Zend_Date">
<link rel="chapter" href="zend.db.html" title="Chapter 10. Zend_Db">
<link rel="chapter" href="zend.debug.html" title="Chapter 11. Zend_Debug">
<link rel="chapter" href="zend.dojo.html" title="Chapter 12. Zend_Dojo">
<link rel="chapter" href="zend.dom.html" title="Chapter 13. Zend_Dom">
<link rel="chapter" href="zend.exception.html" title="Chapter 14. Zend_Exception">
<link rel="chapter" href="zend.feed.html" title="Chapter 15. Zend_Feed">
<link rel="chapter" href="zend.filter.html" title="Chapter 16. Zend_Filter">
<link rel="chapter" href="zend.form.html" title="Chapter 17. Zend_Form">
<link rel="chapter" href="zend.gdata.html" title="Chapter 18. Zend_Gdata">
<link rel="chapter" href="zend.http.html" title="Chapter 19. Zend_Http">
<link rel="chapter" href="zend.infocard.html" title="Chapter 20. Zend_InfoCard">
<link rel="chapter" href="zend.json.html" title="Chapter 21. Zend_Json">
<link rel="chapter" href="zend.layout.html" title="Chapter 22. Zend_Layout">
<link rel="chapter" href="zend.ldap.html" title="Chapter 23. Zend_Ldap">
<link rel="chapter" href="zend.loader.html" title="Chapter 24. Zend_Loader">
<link rel="chapter" href="zend.locale.html" title="Chapter 25. Zend_Locale">
<link rel="chapter" href="zend.log.html" title="Chapter 26. Zend_Log">
<link rel="chapter" href="zend.mail.html" title="Chapter 27. Zend_Mail">
<link rel="chapter" href="zend.measure.html" title="Chapter 28. Zend_Measure">
<link rel="chapter" href="zend.memory.html" title="Chapter 29. Zend_Memory">
<link rel="chapter" href="zend.mime.html" title="Chapter 30. Zend_Mime">
<link rel="chapter" href="zend.openid.html" title="Chapter 31. Zend_OpenId">
<link rel="chapter" href="zend.paginator.html" title="Chapter 32. Zend_Paginator">
<link rel="chapter" href="zend.pdf.html" title="Chapter 33. Zend_Pdf">
<link rel="chapter" href="zend.registry.html" title="Chapter 34. Zend_Registry">
<link rel="chapter" href="zend.rest.html" title="Chapter 35. Zend_Rest">
<link rel="chapter" href="zend.search.lucene.html" title="Chapter 36. Zend_Search_Lucene">
<link rel="chapter" href="zend.server.html" title="Chapter 37. Zend_Server">
<link rel="chapter" href="zend.service.html" title="Chapter 38. Zend_Service">
<link rel="chapter" href="zend.session.html" title="Chapter 39. Zend_Session">
<link rel="chapter" href="zend.soap.html" title="Chapter 40. Zend_Soap">
<link rel="chapter" href="zend.test.html" title="Chapter 41. Zend_Test">
<link rel="chapter" href="zend.text.html" title="Chapter 42. Zend_Text">
<link rel="chapter" href="zend.timesync.html" title="Chapter 43. Zend_TimeSync">
<link rel="chapter" href="zend.translate.html" title="Chapter 44. Zend_Translate">
<link rel="chapter" href="zend.uri.html" title="Chapter 45. Zend_Uri">
<link rel="chapter" href="zend.validate.html" title="Chapter 46. Zend_Validate">
<link rel="chapter" href="zend.version.html" title="Chapter 47. Zend_Version">
<link rel="chapter" href="zend.view.html" title="Chapter 48. Zend_View">
<link rel="chapter" href="zend.xmlrpc.html" title="Chapter 49. Zend_XmlRpc">
<link rel="appendix" href="requirements.html" title="Appendix A. Zend Framework Requirements">
<link rel="appendix" href="coding-standard.html" title="Appendix B. Zend Framework Coding Standard for PHP">
<link rel="appendix" href="copyrights.html" title="Appendix C. Copyright Information">
<link rel="index" href="the.index.html" title="Index">
<link rel="subsection" href="zend.paginator.advanced.html#zend.paginator.advanced.adapters" title="32.4.1. Custom data source adapters">
<link rel="subsection" href="zend.paginator.advanced.html#zend.paginator.advanced.scrolling-styles" title="32.4.2. Custom scrolling styles">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader"><table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">32.4. Advanced usage</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="zend.paginator.configuration.html">Prev</a> </td>
<th width="60%" align="center">Chapter 32. Zend_Paginator</th>
<td width="20%" align="right"> <a accesskey="n" href="zend.pdf.html">Next</a>
</td>
</tr>
</table></div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="zend.paginator.advanced"></a>32.4. Advanced usage</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.paginator.advanced.adapters"></a>32.4.1. Custom data source adapters</h3></div></div></div>
<p>
            At some point you may run across a data type that is not covered by
            the packaged adapters.  In this case, you will need to write your 
            own.
        </p>
<p>
            To do so, you must implement 
            <code class="code">Zend_Paginator_Adapter_Interface</code>.  There are two 
            methods required to do this:
        </p>
<div class="itemizedlist"><ul type="disc">
<li><p>count()</p></li>
<li><p>getItems($offset, $itemCountPerPage)</p></li>
</ul></div>
<p>
            Additionally, you'll want to implement a constructor that takes 
            your data source as a parameter and stores it as a protected or 
            private property.  How you wish to go about doing this 
            specifically is up to you.
        </p>
<p>
            If you've ever used the SPL interface 
            <a href="http://www.php.net/~helly/php/ext/spl/interfaceCountable.html" target="_top"><code class="code">Countable</code></a>, 
            you're familiar with <code class="code">count()</code>.  As used with 
            <code class="code">Zend_Paginator</code>, this is the total number of items 
            in the data collection.
        </p>
<p>
            The <code class="code">getItems()</code> method is only slightly more 
            complicated.  For this, your adapter is supplied with an offset and
            the number of items to display per page.  You must return the 
            appropriate slice of data.  For an array, that would be:
        </p>
<p>
            </p>
<pre class="programlisting">return array_slice($this-&gt;_array, $offset, $itemCountPerPage);
            </pre>
<p>
        </p>
<p>
            Take a look at the packaged adapters (all of which implement the 
            <code class="code">Zend_Paginator_Adapter_Interface</code>) for ideas of how you
            might go about implementing your own.
        </p>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="zend.paginator.advanced.scrolling-styles"></a>32.4.2. Custom scrolling styles</h3></div></div></div>
<p>
            Creating your own scrolling style requires that you implement 
            <code class="code">Zend_Paginator_ScrollingStyle_Interface</code>, which defines
            a single method, <code class="code">getPages()</code>.  Specifically,
        </p>
<p>
            </p>
<pre class="programlisting">public function getPages(Zend_Paginator $paginator, $pageRange = null);
            </pre>
<p>
        </p>
<p>
            This method should calculate a lower and upper bound for page 
            numbers within the range of so-called "local" pages (that is, pages
            that are nearby the current page).
        </p>
<p>
            Unless it extends another scrolling style (see 
            <code class="code">Zend_Paginator_ScrollingStyle_Elastic</code> for an example),
            your custom scrolling style will inevitably end with something 
            similar to the following line of code:
        </p>
<p>
            </p>
<pre class="programlisting">return $paginator-&gt;getPagesInRange($lowerBound, $upperBound);
            </pre>
<p>
        </p>
<p>
            There's nothing special about this call; it's merely a convenience 
            method to check the validity of the lower and upper bound and 
            return an array of the range to the paginator.
        </p>
<p>
            When you're ready to use your new scrolling style, you'll need to 
            tell <code class="code">Zend_Paginator</code> what directory to look in.  To do
            that, do the following:
        </p>
<p>
            </p>
<pre class="programlisting">$prefix = 'My_Paginator_ScrollingStyle';
$path   = 'My/Paginator/ScrollingStyle/';
Zend_Paginator::addScrollingStylePrefixPath($prefix, $path);
            </pre>
<p>
        </p>
</div>
</div>
<div class="navfooter"><table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="zend.paginator.configuration.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="zend.paginator.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="zend.pdf.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">32.3. Configuration </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> Chapter 33. Zend_Pdf</td>
</tr>
</table></div>
<div class="revinfo"></div>
</body>
</html>
